// pages/game/game.js

//倒计时的时间
var TIME=60;
Page({
 //非常重要******
 //只有在date里面的属性 才能在wxml中使用
 //才可以使用数据双向绑定的功能
  data: {
    //表示 色块行数的 属性
    row:2,
    //盛放色块详细信息的数组
    items:[],
    //倒计时的时间
    time:TIME,
    score:0,//分数
    step:0//步数
  },
  //初始化页面的调用
  //可以在这个函数中 初始化 不在wxml中使用的属性
  onLoad:function(){
    this.width=750;
    this.getDeviceWidth();
    this.gameCore();
    //初始化titles的数组
    this.titles = ["色狼","色鬼","色魔","色圣"];
    //获取title的下标
    this.titleIndex = 0;
  },
  
  //游戏的核心部分
  gameCore:function(){
    //计算出来每个色块的间距
    var tempColorViewWidth = this.width/this.data.row;//平均分的临时色块宽度
    var space = tempColorViewWidth * 0.1;//计算后的色块间距
    //色块的宽度 = (总宽度 -总间距)/一行有多少色块
    var allSpace = space * (this.data.row+1);//总间距
    var colorVeiwWidth = (this.width - allSpace)/ this.data.row;
    //获取随机颜色
    var color = this.randColor();
    //设置特殊颜色是哪一个
    var allNums = this.data.row*this.data.row;
    var specialIndex = parseInt(Math.random()*allNums);
    var tempList = [];
    //循环创建色块信息 放入数组
    for(var i = 0;i<allNums;i++){
     var info = {
       width:colorVeiwWidth,
       color:color,
       space:space,
       opacity:i==specialIndex?0.5:1
     } 
     tempList.push(info);
    }
    this.setData({
      items:tempList
    });
  },
  //随机颜色的函数
  randColor:function(){
    //parseInt(Math.random() * 256)随即一个0到255之间得整数
    var r = parseInt(Math.random() * 256);
    var g = parseInt(Math.random() * 256);
    var b = parseInt(Math.random() * 256);
    return "rgb("+r+","+g+","+b+")";
  },
  //获取设备的宽度
  getDeviceWidth:function(){
    wx.getSystemInfo({
      success: function(res) {
        this.width=res.windowWidth;
      }.bind(this)
    })
  },
  success:function(){
    //成功的时候增加row的值
    //若果作难度扩展 可以添加专门改变this.date.row的值的函数
    this.setData({
      row:++this.data.row,
      step:++this.data.step
    });
    //走五步 给一分
    if(this.data.step%5 == 0){
      this.setData({
        score:++this.data.score
      });
    }
    if (this.data.step%10 == 0) {
      ++this.titleIndex;
    }
    //防止数组越界
    if (this.titleIndex >= this.titles.length) {
      this.titleIndex = this.titles.length - 1;
    }
  },
  getTitle:function(){
   
    return this.titles[this.titleIndex];
  },
  fail:function(){
     //重置时间状态、行数
    this.setData({
      row:2,
      time:TIME
    });
    clearInterval(this.timer);
    wx.showModal({
      title: '温馨提示',
      content: '你已经被警方锁定，你就是被追查的'+this.getTitle()+'，是否重新检测！',//todo:暂时 写后面根据等级的名字提示
      showCancel: true,
      cancelText: '去自首',
      cancelColor: 'red',
      confirmText: '继续检测',
      confirmColor: 'orange',
      success: function(res){
        console.log(res);
        //点击 去自首   返回上一页
        //点击 继续检测 重新开始游戏
        res.cancel?this.back():this.reStartGame();
      }.bind(this)
    })
    this.titleIndex = 0;
  },
  back:function(){
    wx.navigateBack();
    //todo:把分数上传到服务器
  },
  reStartGame:function(){
    //开启新的定时器
    this.timer = setInterval(this.updateTime,1000);
    this.gameCore();
  },
  showMessage: function (i) {
    var opacity = i.target.dataset.opacity;
    opacity != 1 ? this.success() : this.fail();
    this.gameCore();
  },
  chooseAction:function(i){

  },
  //更新时间的函数
  updateTime: function () {
    this.setData({
      time: --this.data.time
    });
    if(this.data.time <=0){
      this.fail();
    }
  },
  //页面显示时候调用
  onShow: function () {
    this.timer = setInterval(this.updateTime, 1000);//this.updateTime不是调用函数，只是把名字给它
    this.playMusic();
  },

  onUnload:function(){
    clearInterval(this.timer);
    this.timer = null;
    this.stopMusic();
  },
    playMusic:function(){
      wx.playBackgroundAudio({
        dataUrl: 'http://bmob-cdn-19170.b0.upaiyun.com/2018/05/16/ea45ba3440d019fb80f292a0a8871ea6.mp3',
      })
    },
    stopMusic:function(){
      wx.stopBackgroundAudio();
    }
})